import $store from '@/store';
// import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
import { isNumber, isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash';
import throttle from '@/LC/helper/throttle';
import LC from '..';

const _go = (
	path,
	params = {},
	options = {
		redirect: false,
	},
) => {
	let page = ''; // 跳转页面
	let query = ''; // 页面参数
	let url = ''; // 跳转页面完整路径

	if (isString(path)) {
		// 判断跳转类型是 path ｜ 还是http
		if (startsWith(path, 'http')) {
			// #ifdef H5
			window.location = path;
			return;
			// #endif
			// #ifndef H5
			page = `/pages/public/webview`;
			query = `url=${encodeURIComponent(path)}`;
			// #endif
		} else if (startsWith(path, 'action:')) {
			handleAction(path);
			return;
		} else {
			[page, query] = path.split('?');
		}
		if (!isEmpty(params)) {
			let query2 = paramsToQuery(params);
			if (isEmpty(query)) {
				query = query2;
			} else {
				query += '&' + query2;
			}
		}
	}

	if (isObject(path)) {
		page = path.url;
		if (!isNil(path.params)) {
			query = paramsToQuery(path.params);
		}
	}
	
	const nextRoute = ROUTES_MAP[page];
	if (nextRoute.meta?.password && !$store('user').info.init_trade_pwd) {
		
		uni.showModal({
			title: LC.$t('ts1'),
			content: LC.$t('wszmmts'),
			showCancel:false,
			confirmText:LC.$t('qd'),
			confirmColor:'#101010',
			success: function (res) {
				if (res.confirm) {
					go('/pages/user/setpayword')
				} else if (res.cancel) {
					console.log('用户点击取消');
				}
			}
		});
		return;
	}
	// 未找到指定跳转页面
	// mark: 跳转404页
	if (!nextRoute) {
		console.log(`%c跳转路径参数错误<${page || 'EMPTY'}>`, 'color:red;background:yellow');
		return;
	}

	// 页面登录拦截
	if (nextRoute.meta?.auth && !$store('user').isLogin) {
		
		uni.reLaunch({
			url:'/pages/auth/login'
		})
		return;
	}

	url = page;
	if (!isEmpty(query)) {
		url += `?${query}`;
	}

	// 跳转底部导航
	if (TABBAR.includes(page)) {
		uni.switchTab({
			url,
		});
		return;
	}

	// 使用redirect跳转
	if (options.redirect) {
		uni.redirectTo({
			url,
		});
		return;
	}

	uni.navigateTo({
		url,
	});
};

// 限流 防止重复点击跳转
function go(...args) {
	throttle(() => {
		_go(...args);
	});
}

function paramsToQuery(params) {
	if (isEmpty(params)) {
		return '';
	}
	// return new URLSearchParams(Object.entries(params)).toString();
	let query = [];
	for (let key in params) {
		query.push(key + '=' + params[key]);
	}

	return query.join('&');
}

function back() {
	// #ifdef H5
	history.back();
	// #endif

	// #ifndef H5
	uni.navigateBack();
	// #endif
}

function redirect(path, params = {}) {
	go(path, params, {
		redirect: true,
	});
}

// 检测是否有浏览器历史
function hasHistory() {
	// #ifndef H5
	const pages = getCurrentPages();
	if (pages.length > 1) {
		return true;
	}
	return false;
	// #endif

	// #ifdef H5
	return !!history.state.back;
	// #endif
}

function getCurrentRoute(field = '') {
	let currentPage = getCurrentPage();
	// #ifdef MP
	currentPage.$page['route'] = currentPage.route;
	currentPage.$page['options'] = currentPage.options;
	// #endif
	if (field !== '') {
		return currentPage.$page[field];
	} else {
		return currentPage.$page;
	}
}

function getCurrentPage() {
	let pages = getCurrentPages();
	return pages[pages.length - 1];
}

function handleAction(path) {
	const action = path.split(':');
	switch (action[1]) {
		case 'showShareModal':
			showShareModal();
			break;
	}
}

function error(errCode, errMsg = '') {
	redirect('/pages/public/error', {
		errCode,
		errMsg,
	});
}

export default {
	go,
	back,
	hasHistory,
	redirect,
	getCurrentPage,
	getCurrentRoute,
	error,
};